记录一次将 Ubuntu 服务器
/data目录(约 25.3T)通过 rsync 迁移至麒麟服务器的完整过程,供有类似需求的朋友参考。
环境信息
| 项目 | 源服务器 | 目标服务器 |
|---|---|---|
| IP | 60.214.100.80 | 60.214.97.69 |
| 系统 | Ubuntu | Kylin Server V10 SP3 |
| SSH 端口 | 22 | 221 |
| 数据目录 | /data(26T) | /data(40T 可用) |
| rsync 版本 | 3.1.2 | 3.1.3 |
一、为什么选择 rsync
- 断点续传:中断后重新执行,自动跳过已传输文件
- 增量同步:只传差异部分,不重复传输
- 保留属性:权限、时间戳、软链 接等完整保留
- 跨平台:Ubuntu ↔ 麒麟(CentOS 系)完全兼容
二、安装 rsync
Ubuntu(源服务器)
# 先检查是否已安装
rsync --version
# 未安装则执行
apt update && apt install -y rsync
麒麟 Kylin Server(目标服务器)
麒麟是基于 RHEL/CentOS 的系列,使用 dnf 或 yum:
# 优先使用 dnf
dnf install -y rsync
# 或使用 yum
yum install -y rsync
两端版本小版本差异(如 3.1.2 vs 3.1.3)完全没问题,不影响传输。
三、配置 SSH 免密登录
由于传输时间较长(预计数天),配置免密登录避免人工干预。
1. 在源服务器生成密钥对
ssh-keygen -t rsa -b 4096 -C "rsync-transfer" -f ~/.ssh/id_rsa_rsync
提示输入 passphrase 时,直接按两次回车(不设密码),否则后台传输会中断。
2. 推送公钥到目标服务器
目标服务器 SSH 使用非标准端口 221,需加 -p 221:
ssh-copy-id -i ~/.ssh/id_rsa_rsync.pub -p 221 root@60.214.97.69
执行过程中会出现:
The authenticity of host '[60.214.97.69]:221' can't be established.
Are you sure you want to continue connecting (yes/no)?
输入 yes 回车,再输入目标服务器密码即可。
3. 验证免密登录
ssh -i ~/.ssh/id_rsa_rsync -p 221 root@60.214.97.69
能直接登录(不提示密码)即为成功。
4. 配置 SSH config(简化后续命令)
cat >> ~/.ssh/config << 'EOF'
Host target-server
HostName 60.214.97.69
Port 221
User root
IdentityFile ~/.ssh/id_rsa_rsync
Compression no
EOF
chmod 600 ~/.ssh/config
配置后可直接用 ssh target-server 登录,rsync 命令也大幅简化。
四、预检(dry-run)
正式传输前务必预演,只模拟不实际传输:
rsync -avzn \
--stats \
--progress \
/data/ \
target-server:/data/
预演结果分析
Number of files: 190,061 (reg: 179,683, dir: 10,378)
Number of created files: 190,060
Total file size: 27,853,730,829,438 bytes # 约 25.3T
rsync error: some files/attrs were not transferred (code 23)
看到 code 23 说明有部分文件权限不足,需要排查:
rsync -avzn --stats /data/ target-server:/data/ \
2>&1 | grep -E "^rsync:|failed|permission"
输出结果:
rsync: opendir "/data/.Recycle_bin" failed: Permission denied (13)
检查该目录:
sudo du -sh /data/.Recycle_bin # 输出:0
sudo ls -la /data/.Recycle_bin # 空目录
确认是空的回收站目录,传输时直接排除即可。
五、正式传输
启动后台传输
nohup rsync -avz \
--progress \
--partial \
--partial-dir=/data/.rsync-partial \
--stats \
--human-readable \
--exclude='.Recycle_bin' \
--log-file=/home/xfzd123/rsync-transfer.log \
/data/ \
target-server:/data/ \
> /home/xfzd123/rsync-output.log 2>&1 &
echo $! > /tmp/rsync.pid
cat /tmp/rsync.pid
关键参数说明
| 参数 | 作用 |
|---|---|
-a | 归档模式,保留所有文件属性 |
-v | 详细输出 |
-z | 压缩传输,节省带宽 |
--partial | 支持断点续传 |
--partial-dir | 未完成文件单独存放,不污染目标目录 |
--exclude | 排 除指定目录 |
--log-file | 记录完整传输日志 |
nohup + & | 后台运行,关闭终端不中断 |
⚠️ 注意日志路径:普通用户没有
/var/log/的写权限,应改用~/目录。
六、监控传输进度
查看实时日志
tail -f /home/xfzd123/rsync-output.log
确认进程存活
ps aux | grep rsync